package boot

import (
	"FeedXmh/app/model"
	"FeedXmh/hub"
	"FeedXmh/tdengine"
	"fmt"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/gcron"
	"github.com/gogf/gf/util/gconv"
	"time"
)

func init() {

	hub.StartHub()

	node_prefix := g.Cfg().GetString("redis.node_prefix")
	model.Redis_Node_Prefix = node_prefix
	g.Log().Line(true).Infof("Redis_Node_Prefix:%s", model.Redis_Node_Prefix)
	sys_name := g.Cfg().GetString("basic.sys_name")
	model.SysName = sys_name
	_, err := g.Redis("default").Do("set", fmt.Sprintf("%s:config:sysname", model.Redis_Node_Prefix), model.SysName)
	if err != nil {
		g.Log().Line(true).Error(err)
	} else {
		g.Log().Line(true).Debugf("Redis set %s:config:sysname ok", model.Redis_Node_Prefix)
	}
	v, err := g.Redis("default").Do("get", fmt.Sprintf("%s:config:sysname", model.Redis_Node_Prefix))
	if err != nil {
		g.Log().Line(true).Error(err)
	} else {
		g.Log().Line(true).Infof("Redis Server OK:%s", gconv.String(v))
	}

	//redis.QuerySn("87005456")

	hub.LoadFeedStandard()
	gcron.AddSingleton("@every 1h", func() {
		hub.LoadFeedStandard()
	})

	//初始化tdengine连接
	model.TaosDB = tdengine.GetTaosDb()
	gcron.AddSingleton("@every 1m", func() {
		g.Log().Line(true).Debug("CheckTaosDB")
		tdengine.CheckTaosDB()
	})

	debug_mode := g.Cfg().GetBool("basic.DebugMode")
	if debug_mode {
		g.Log().Line(true).Info("boot on DEBUG env!")
		//lastid := tdengine.GetLastRid("60000087")
		//g.Log().Line(true).Debugf("lastid:%d", lastid)
		//hub.CheckFeedNodeReplace()
		//hub.UpdateFeedPlanGroupCode()

	} else {
		g.Log().Line(true).Info("boot on PRD env!")
		cloudMode := g.Cfg().GetBool("basic.CloudMode")
		if cloudMode {
			g.Log().Line(true).Info("boot on CloudMode!")

			//云端模式才分配地址
			gcron.AddSingleton("@every 10s", func() {
				g.Log().Line(true).Debug("Allocate!")
				hub.Allocate(model.GW_MODE)
			})
		}

		go hub.UpdateNMSWQGWOnline()
		go hub.UpdateHouseSummary()
		go hub.UpdateFarmSummary()

		time.Sleep(2 * time.Second)
		hub.ReadNMSWQGW_AllStatus()

		gcron.AddSingleton("@every 1m", func() {
			g.Log().Line(true).Info("ReadHZFGWStatus")

			hub.ReadNMSWQGW_AllStatus()

		})

		gcron.AddSingleton("@every 2m", func() {
			time.Sleep(5 * time.Second)
			g.Log().Line(true).Info("UpdateFarmSummary")
			hub.UpdateFarmSummary()

			time.Sleep(5 * time.Second)
			g.Log().Line(true).Info("UpdateHouseSummary")
			hub.UpdateHouseSummary()

		})

		gcron.AddSingleton("@every 1m", func() {
			//替换饲喂器流程
			hub.CheckFeedNodeReplace()
		})

		gcron.AddSingleton("@every 2m", func() {

			time.Sleep(10 * time.Second)
			g.Log().Line(true).Debug("UpdateOnline")
			hub.UpdateNMSWQGWOnline()
			time.Sleep(10 * time.Second)
		})

		gcron.AddSingleton("@every 10m", func() {
			//清理无效状态
			//hub.ClearNodeStatus()
		})

		gcron.AddSingleton("@every 5m", func() {
			time.Sleep(10 * time.Second)
			hub.GetAllNMSWQGWClock() //改为读取终端时间，超过5分钟偏差自动校时
		})

		//新版饲喂器 01:00 把所有饲喂器昨日饲喂量更新进入redis
		gcron.AddSingleton("0 0 1 * * *", func() {
			hub.UpdateNMSWQGWPreFeed()
		})

		//3:00 清理过期饲喂器记录
		gcron.AddSingleton("0 0 3 * * *", func() {
			hub.ClearFeedRecords()
		})
	}
}
